import { JSEncrypt } from "jsencrypt";
import { parseBigInt } from 'jsencrypt/lib/lib/jsbn/jsbn'

const pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXtm5htrddYcHi+K3ePCbAXXsmX0cvKYQFKobPLAYvJRxZ/C9/lQ5GR9+QUT2T8wyd9GtpXoQWYy/hV2QliLm9em2hkIBY09iYqHd8QmtLiLxQ66UtvDQDG/oHMNVQFRSS9RVR7TSpNhmC0I2VEfqF/POJim7RuHuPT/ZTB+2dbwIDAQAB";
export function rsaEncrypt(params){

    //实例化JSEncrypt
    let jse = new JSEncrypt();
    //加密公钥（由服务端生成）
    jse.setPublicKey(pubKey);
    let  data = jse.encrypt(params);  // 进行加密
    return data;
}
// export function decrypt(params) {
//
//     //实例化JSEncrypt
//     let jse = new JSEncrypt();
//     //使用前端私钥解密（私钥由服务端生成）
//     jse.setPublicKey(pubKey);
//     let decryptData = jse.decrypt(params); //解密
//     let data = JSON.parse(decryptData);
//     return data;
// }

function pkcs1unpad2(d, n) {
    var b = d.toByteArray()
    var i = 0
    while (i < b.length && b[i] === 0) {
        ++i
    }
    // if (b.length - i !== n - 1 || b[i] !== 2) {
    //   return null
    // }
    ++i
    while (b[i] !== 0) {
        if (++i >= b.length) {
            return null
        }
    }
    var ret = ''
    while (++i < b.length) {
        var c = b[i] & 255
        if (c < 128) { // utf-8 decode
            ret += String.fromCharCode(c)
        } else if ((c > 191) && (c < 224)) {
            ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63))
            ++i
        } else {
            ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63))
            i += 2
        }
    }
    return ret
}

export function rsaDecrypt(data) {
    const encrypt = new JSEncrypt();
    encrypt.setPublicKey(pubKey)
    // 不支持公钥解密
    // 自定义解析方法支持公钥解析
    const rsaKey = encrypt.getKey()
    rsaKey.decrypt = function(ctext) {
        var c = parseBigInt(ctext,16)
        var m = this.doPublic(c)
        if (m == null) {
            return null
        }
        return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3)
    }
    return encrypt.decrypt(data)
}
